1 /* 2 3 Boost Software License - Version 1.0 - August 17th, 2003 4 5 Permission is hereby granted, free of charge, to any person or organization 6 obtaining a copy of the software and accompanying documentation covered by 7 this license (the "Software") to use, reproduce, display, distribute, 8 execute, and transmit the Software, and to prepare derivative works of the 9 Software, and to permit third-parties to whom the Software is furnished to 10 do so, all subject to the following: 11 12 The copyright notices in the Software and this entire statement, including 13 the above license grant, this restriction and the following disclaimer, 14 must be included in all copies of the Software, in whole or in part, and 15 all derivative works of the Software, unless such copies or derivative 16 works are solely in the form of machine-executable object code generated by 17 a source language processor. 18 19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 DEALINGS IN THE SOFTWARE. 26 27 */ 28 29 module derelict.glib.gscanner; 30 31 import derelict.glib.gtypes; 32 import derelict.glib.glibconfig; 33 import derelict.glib.ghash; 34 import derelict.glib.gdataset; 35 import core.stdc.config; 36 37 extern (C): 38 39 alias _GScanner GScanner; 40 alias _GScannerConfig GScannerConfig; 41 alias _GTokenValue GTokenValue; 42 alias void function (_GScanner*, char*, int) GScannerMsgFunc; 43 alias _Anonymous_0 GErrorType; 44 alias _Anonymous_1 GTokenType; 45 46 enum _Anonymous_0 47 { 48 G_ERR_UNKNOWN = 0, 49 G_ERR_UNEXP_EOF = 1, 50 G_ERR_UNEXP_EOF_IN_STRING = 2, 51 G_ERR_UNEXP_EOF_IN_COMMENT = 3, 52 G_ERR_NON_DIGIT_IN_CONST = 4, 53 G_ERR_DIGIT_RADIX = 5, 54 G_ERR_FLOAT_RADIX = 6, 55 G_ERR_FLOAT_MALFORMED = 7 56 } 57 58 enum _Anonymous_1 59 { 60 G_TOKEN_EOF = 0, 61 G_TOKEN_LEFT_PAREN = 40, 62 G_TOKEN_RIGHT_PAREN = 41, 63 G_TOKEN_LEFT_CURLY = 123, 64 G_TOKEN_RIGHT_CURLY = 125, 65 G_TOKEN_LEFT_BRACE = 91, 66 G_TOKEN_RIGHT_BRACE = 93, 67 G_TOKEN_EQUAL_SIGN = 61, 68 G_TOKEN_COMMA = 44, 69 G_TOKEN_NONE = 256, 70 G_TOKEN_ERROR = 257, 71 G_TOKEN_CHAR = 258, 72 G_TOKEN_BINARY = 259, 73 G_TOKEN_OCTAL = 260, 74 G_TOKEN_INT = 261, 75 G_TOKEN_HEX = 262, 76 G_TOKEN_FLOAT = 263, 77 G_TOKEN_STRING = 264, 78 G_TOKEN_SYMBOL = 265, 79 G_TOKEN_IDENTIFIER = 266, 80 G_TOKEN_IDENTIFIER_NULL = 267, 81 G_TOKEN_COMMENT_SINGLE = 268, 82 G_TOKEN_COMMENT_MULTI = 269, 83 G_TOKEN_LAST = 270 84 } 85 86 struct _GScannerConfig 87 { 88 gchar* cset_skip_characters; 89 gchar* cset_identifier_first; 90 gchar* cset_identifier_nth; 91 gchar* cpair_comment_single; 92 guint case_sensitive; 93 guint skip_comment_multi; 94 guint skip_comment_single; 95 guint scan_comment_multi; 96 guint scan_identifier; 97 guint scan_identifier_1char; 98 guint scan_identifier_NULL; 99 guint scan_symbols; 100 guint scan_binary; 101 guint scan_octal; 102 guint scan_float; 103 guint scan_hex; 104 guint scan_hex_dollar; 105 guint scan_string_sq; 106 guint scan_string_dq; 107 guint numbers_2_int; 108 guint int_2_float; 109 guint identifier_2_string; 110 guint char_2_token; 111 guint symbol_2_token; 112 guint scope_0_fallback; 113 guint store_int64; 114 guint padding_dummy; 115 } 116 117 struct _GScanner 118 { 119 gpointer user_data; 120 guint max_parse_errors; 121 guint parse_errors; 122 const(gchar)* input_name; 123 GData* qdata; 124 GScannerConfig* config; 125 GTokenType token; 126 GTokenValue value; 127 guint line; 128 guint position; 129 GTokenType next_token; 130 GTokenValue next_value; 131 guint next_line; 132 guint next_position; 133 GHashTable* symbol_table; 134 gint input_fd; 135 const(gchar)* text; 136 const(gchar)* text_end; 137 gchar* buffer; 138 guint scope_id; 139 GScannerMsgFunc msg_handler; 140 } 141 142 union _GTokenValue 143 { 144 gpointer v_symbol; 145 gchar* v_identifier; 146 gulong v_binary; 147 gulong v_octal; 148 gulong v_int; 149 guint64 v_int64; 150 gdouble v_float; 151 gulong v_hex; 152 gchar* v_string; 153 gchar* v_comment; 154 guchar v_char; 155 guint v_error; 156 } 157 158 version(Derelict_Link_Static) 159 { 160 extern( C ) nothrow 161 { 162 GScanner* g_scanner_new(const(GScannerConfig)* config_templ); 163 void g_scanner_destroy(GScanner* scanner); 164 void g_scanner_input_file(GScanner* scanner, gint input_fd); 165 void g_scanner_sync_file_offset(GScanner* scanner); 166 void g_scanner_input_text(GScanner* scanner, const(gchar)* text, guint text_len); 167 GTokenType g_scanner_get_next_token(GScanner* scanner); 168 GTokenType g_scanner_peek_next_token(GScanner* scanner); 169 GTokenType g_scanner_cur_token(GScanner* scanner); 170 GTokenValue g_scanner_cur_value(GScanner* scanner); 171 guint g_scanner_cur_line(GScanner* scanner); 172 guint g_scanner_cur_position(GScanner* scanner); 173 gboolean g_scanner_eof(GScanner* scanner); 174 guint g_scanner_set_scope(GScanner* scanner, guint scope_id); 175 void g_scanner_scope_add_symbol(GScanner* scanner, guint scope_id, const(gchar)* symbol, gpointer value); 176 void g_scanner_scope_remove_symbol(GScanner* scanner, guint scope_id, const(gchar)* symbol); 177 gpointer g_scanner_scope_lookup_symbol(GScanner* scanner, guint scope_id, const(gchar)* symbol); 178 void g_scanner_scope_foreach_symbol(GScanner* scanner, guint scope_id, GHFunc func, gpointer user_data); 179 gpointer g_scanner_lookup_symbol(GScanner* scanner, const(gchar)* symbol); 180 void g_scanner_unexp_token(GScanner* scanner, GTokenType expected_token, const(gchar)* identifier_spec, const(gchar)* symbol_spec, const(gchar)* symbol_name, const(gchar)* message, gint is_error); 181 void g_scanner_error(GScanner* scanner, const(gchar)* format, ...); 182 void g_scanner_warn(GScanner* scanner, const(gchar)* format, ...); 183 } 184 } 185 else 186 { 187 extern( C ) nothrow 188 { 189 alias da_g_scanner_new = GScanner* function(const(GScannerConfig)* config_templ); 190 alias da_g_scanner_destroy = void function(GScanner* scanner); 191 alias da_g_scanner_input_file = void function(GScanner* scanner, gint input_fd); 192 alias da_g_scanner_sync_file_offset = void function(GScanner* scanner); 193 alias da_g_scanner_input_text = void function(GScanner* scanner, const(gchar)* text, guint text_len); 194 alias da_g_scanner_get_next_token = GTokenType function(GScanner* scanner); 195 alias da_g_scanner_peek_next_token = GTokenType function(GScanner* scanner); 196 alias da_g_scanner_cur_token = GTokenType function(GScanner* scanner); 197 alias da_g_scanner_cur_value = GTokenValue function(GScanner* scanner); 198 alias da_g_scanner_cur_line = guint function(GScanner* scanner); 199 alias da_g_scanner_cur_position = guint function(GScanner* scanner); 200 alias da_g_scanner_eof = gboolean function(GScanner* scanner); 201 alias da_g_scanner_set_scope = guint function(GScanner* scanner, guint scope_id); 202 alias da_g_scanner_scope_add_symbol = void function(GScanner* scanner, guint scope_id, const(gchar)* symbol, gpointer value); 203 alias da_g_scanner_scope_remove_symbol = void function(GScanner* scanner, guint scope_id, const(gchar)* symbol); 204 alias da_g_scanner_scope_lookup_symbol = gpointer function(GScanner* scanner, guint scope_id, const(gchar)* symbol); 205 alias da_g_scanner_scope_foreach_symbol = void function(GScanner* scanner, guint scope_id, GHFunc func, gpointer user_data); 206 alias da_g_scanner_lookup_symbol = gpointer function(GScanner* scanner, const(gchar)* symbol); 207 alias da_g_scanner_unexp_token = void function(GScanner* scanner, GTokenType expected_token, const(gchar)* identifier_spec, const(gchar)* symbol_spec, const(gchar)* symbol_name, const(gchar)* message, gint is_error); 208 alias da_g_scanner_error = void function(GScanner* scanner, const(gchar)* format, ...); 209 alias da_g_scanner_warn = void function(GScanner* scanner, const(gchar)* format, ...); 210 } 211 212 __gshared 213 { 214 da_g_scanner_new g_scanner_new; 215 da_g_scanner_destroy g_scanner_destroy; 216 da_g_scanner_input_file g_scanner_input_file; 217 da_g_scanner_sync_file_offset g_scanner_sync_file_offset; 218 da_g_scanner_input_text g_scanner_input_text; 219 da_g_scanner_get_next_token g_scanner_get_next_token; 220 da_g_scanner_peek_next_token g_scanner_peek_next_token; 221 da_g_scanner_cur_token g_scanner_cur_token; 222 da_g_scanner_cur_value g_scanner_cur_value; 223 da_g_scanner_cur_line g_scanner_cur_line; 224 da_g_scanner_cur_position g_scanner_cur_position; 225 da_g_scanner_eof g_scanner_eof; 226 da_g_scanner_set_scope g_scanner_set_scope; 227 da_g_scanner_scope_add_symbol g_scanner_scope_add_symbol; 228 da_g_scanner_scope_remove_symbol g_scanner_scope_remove_symbol; 229 da_g_scanner_scope_lookup_symbol g_scanner_scope_lookup_symbol; 230 da_g_scanner_scope_foreach_symbol g_scanner_scope_foreach_symbol; 231 da_g_scanner_lookup_symbol g_scanner_lookup_symbol; 232 da_g_scanner_unexp_token g_scanner_unexp_token; 233 da_g_scanner_error g_scanner_error; 234 da_g_scanner_warn g_scanner_warn; 235 } 236 }